package com.example.demokotlin

import org.junit.Test


/**
 * 测试延迟初始化lateinit
 * 1.lateinit 只能修饰var 不能修饰val 变量
 * 2.lateinit 不能修饰可空类型，不能赋值为空，使用前必须初始化。否则
 * 行时抛出未初始化异常
 * 3.不能修饰基本类型Int,Double,Boolean
 *
 * 常量延迟初始化lazy
 * 1.通过by lazy 在第一次使用的时候自动初始化
 * 2.只能修饰val
 *
 * @author zhouronghua
 * @time 2022/3/4 10:00 上午
 */
class LateInitTest {

    /**
     * 不能修饰基本类型Int,Double
     */
    lateinit var name: String

    val age by lazy {
        println("初始化age")
        10
    }

    /**
     * 这是惰性加载成员，使用responseInfo的时候，才执行懒加载Lazy中的函数体
     */
    val responseInfo by lazy {
        request()
    }

    fun request(): String {
        println("开始请求数据")
        println("请求数据中。。。")
        println("请求数据中。。。")
        println("请求数据中。。。")
        println("请求数据中。。。")
        println("请求数据完成")
        return "很高兴获得请求结果，祝贺你"
    }

    @Test
    fun testLazy() {
        // 使用前必须初始化否则会报错UninitializedPropertyAccessException
        name = "小喵咪"
        println(name)
        // 打印年龄
        println(age)
        Thread.sleep(5000)
        println(responseInfo)
    }
}